home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / halfworm.s < prev    next >
Text File  |  1995-09-14  |  15KB  |  960 lines

  1. ItsAHalfWorm:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  
  10.  move.w #45*256+50,14(a0)
  11.  move.w #90*256+100,6(a0)
  12.  
  13.  move.b worry(a0),d0
  14.  move.b d0,d1
  15.  and.w #128,d1
  16.  and.b #127,d0
  17.  sub.b #1,d0
  18.  bge.s .oknn
  19.  move.b #0,d0
  20. .oknn: 
  21.  add.b d0,d1
  22.  move.b d1,worry(a0)
  23.  
  24.  move.w (a0),CollId
  25.  move.w #80,extlen
  26.  move.b #1,awayfromwall
  27.  
  28.  move.l #20*256,StepUpVal
  29.  move.l #20*256,StepDownVal
  30.  move.l #200*128,thingheight
  31.  move.l #4,deadframe
  32.  move.w #27,screamsound
  33.  move.w #64,nasheight
  34.  clr.b gotgun
  35.  move.w 12(a0),d2
  36.  bge.s .stillalive
  37. .notthisone:
  38.  rts
  39.  
  40. .stillalive:
  41.  
  42.  tst.b numlives(a0)
  43.  bgt .notdying
  44.  
  45.  move.w ThirdTimer(a0),d1
  46.  sub.w TempFrames,d1
  47.  bge.s .noneg
  48.  move.w #0,d1
  49. .noneg:
  50.  move.w d1,ThirdTimer(a0)
  51.  
  52.  move.w .dyinganim(pc,d1.w*2),10(a0)
  53.  
  54.  move.b #0,numlives(a0)
  55.  move.l ZoneAdds,a1
  56.  move.l (a1,d2.w*4),a1
  57.  add.l LEVELDATA,a1
  58.  
  59.  move.l ToZoneFloor(a1),d0
  60.  tst.b ObjInTop(a0)
  61.  beq.s .notintopp
  62.  move.l ToUpperFloor(a1),d0
  63. .notintopp:
  64.  asr.l #7,d0
  65.  sub.w #100,d0
  66.  move.w d0,4(a0)
  67.   
  68.   move.w #80,d0
  69.  jsr FindCloseRoom
  70.  rts
  71.  
  72. .dyinganim:
  73.  dcb.w 6,20
  74.  dcb.w 10,19
  75.  dcb.w 10,18
  76.  
  77. .notdying: 
  78.  
  79.  tst.b 17(a0)
  80.  beq.s .cantseeplayer
  81.  tst.w ThirdTimer(a0)
  82.  ble HalfWormAttack
  83.  move.w TempFrames,d0
  84.  sub.w d0,ThirdTimer(a0)
  85.  bge .waitandsee
  86.  move.w #0,ThirdTimer(a0)
  87.  bra .waitandsee
  88.  
  89. .cantseeplayer:
  90.  
  91.  jsr GetRand
  92.  lsr.w #4,d0
  93.  and.w #63,d0
  94.  add.w #20,d0
  95.  move.w d0,ThirdTimer(a0)
  96.  
  97. .waitandsee:
  98.  
  99.  move.w #30,FourthTimer(a0)
  100.  
  101.  move.w 12(a0),d2
  102.  move.l ZoneAdds,a5
  103.  move.l (a5,d2.w*4),d0
  104.  add.l LEVELDATA,d0
  105.  move.l d0,objroom
  106.  
  107.  bsr ViewpointToDraw
  108.  
  109.  asl.l #2,d0
  110.  add.w alframe+2,d0
  111.  add.l #$000d0000,d0
  112.  move.l d0,8(a0)
  113.  
  114.  move.w 4(a0),d0
  115.  sub.w #100,d0
  116.  ext.l d0
  117.  asl.l #7,d0
  118.  move.l d0,newy
  119.  move.l d0,oldy
  120.  
  121.  move.w 12(a0),FromZone
  122.  bsr CheckTeleport
  123.  tst.b OKTEL
  124.  beq.s .notel
  125.  move.l floortemp,d0
  126.  asr.l #7,d0
  127.  add.w d0,4(a0)
  128.  bra .nochangedir
  129. .notel:
  130.  
  131.  move.w maxspd(a0),d2
  132.  muls TempFrames,d2
  133.  move.w d2,speed
  134.  move.w Facing(a0),d0
  135.  move.b ObjInTop(a0),StoodInTop
  136.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  137.  jsr GoInDirection
  138.  move.w #%1000000000,wallflags
  139.  
  140.  move.l #%1111111110111100001,CollideFlags
  141.  bsr Collision
  142.  tst.b hitwall
  143.  beq.s .canmove
  144.  
  145.  move.w oldx,newx
  146.  move.w oldz,newz
  147.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  148.  bra .hitathing
  149.  
  150. .canmove:
  151.  
  152.  clr.b wallbounce
  153.  jsr MoveObject
  154.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  155.  move.b StoodInTop,ObjInTop(a0)
  156.  
  157. .hitathing:
  158.  
  159.  tst.b hitwall
  160.  beq.s .nochangedir
  161.  move.w #-1,ObjTimer(a0)
  162. .nochangedir
  163.  
  164.  move.l objroom,a2
  165.  move.w (a2),12(a0)
  166.  move.w newx,(a1)
  167.  move.w newz,4(a1)
  168.  
  169.  move.w (a2),d0
  170.  move.l #ZoneBrightTable,a5
  171.  move.l (a5,d0.w*4),d0
  172.  tst.b ObjInTop(a0)
  173.  bne.s .okbit
  174.  swap d0
  175. .okbit:
  176.  move.w d0,2(a0)
  177.  
  178.  move.l ToZoneFloor(a2),d0
  179.  tst.b ObjInTop(a0)
  180.  beq.s .notintop
  181.  move.l ToUpperFloor(a2),d0
  182. .notintop:
  183.  asr.l #7,d0
  184.  sub.w #100,d0
  185.  move.w d0,4(a0)
  186.  
  187.  moveq #0,d2
  188.  move.b damagetaken(a0),d2
  189.  beq .noscream
  190.  
  191.  asr.b #2,d2
  192.  bne.s .notovercoat
  193.  moveq #1,d2
  194. .notovercoat:
  195.  
  196.  sub.b d2,numlives(a0)
  197.  bgt .notdeadyet
  198.  
  199.  cmp.b #1,d2
  200.  ble .noexplode
  201.  
  202.  movem.l d0-d7/a0-a6,-(a7)
  203.  sub.l ObjectPoints,a1
  204.  add.l #ObjRotated,a1
  205.  move.l (a1),Noisex
  206.  move.w #300,Noisevol
  207.  move.w #14,Samplenum
  208.  move.b #1,chanpick
  209.  clr.b notifplaying
  210.  st backbeat
  211.  move.b 1(a0),IDNUM
  212.  jsr MakeSomeNoise
  213.  movem.l (a7)+,d0-d7/a0-a6
  214.  
  215.  movem.l d0-d7/a0-a6,-(a7)
  216.  move.w #0,d0
  217.  asr.w #2,d2
  218.  tst.w d2
  219.  bgt.s .ko
  220.  moveq #1,d2
  221. .ko:
  222.  move.w #31,d3
  223.  jsr ExplodeIntoBits
  224.  movem.l (a7)+,d0-d7/a0-a6
  225.  
  226.  cmp.b #80,d2
  227.  blt .noexplode
  228.  
  229.  move.w #-1,12(a0)
  230.  rts
  231.  
  232. .noexplode:
  233.  
  234.  movem.l d0-d7/a0-a6,-(a7)
  235.  sub.l ObjectPoints,a1
  236.  add.l #ObjRotated,a1
  237.  move.l (a1),Noisex
  238.  move.w #200,Noisevol
  239.  move.w screamsound,Samplenum
  240.  move.b #1,chanpick
  241.  clr.b notifplaying
  242.  st backbeat
  243.  move.b 1(a0),IDNUM
  244.  jsr MakeSomeNoise
  245.  movem.l (a7)+,d0-d7/a0-a6
  246.  
  247.  move.w #25,ThirdTimer(a0)
  248.   move.w #80,d0
  249.  jsr FindCloseRoom
  250.  
  251.  rts
  252.  
  253. .notdeadyet:
  254.  clr.b damagetaken(a0)
  255.  movem.l d0-d7/a0-a6,-(a7)
  256.  sub.l ObjectPoints,a1
  257.  add.l #ObjRotated,a1
  258.  move.l (a1),Noisex
  259.  move.w #200,Noisevol
  260.  move.w screamsound,Samplenum
  261.  move.b #1,chanpick
  262.  clr.b notifplaying
  263.  move.b 1(a0),IDNUM
  264.  st backbeat
  265.  jsr MakeSomeNoise
  266.  movem.l (a7)+,d0-d7/a0-a6
  267.  
  268.  
  269.  
  270. .noscream
  271.  
  272.  
  273.  move.w TempFrames,d0
  274.  sub.w d0,ObjTimer(a0)
  275.  bge.s .keepsamedir
  276.  
  277.  jsr GetRand
  278.  and.w #8190,d0
  279.  move.w d0,Facing(a0)
  280.  move.w #50,ObjTimer(a0)
  281.  
  282. .keepsamedir:
  283.  
  284.  move.w TempFrames,d0
  285.  sub.w d0,SecTimer(a0)
  286.  bge.s .nohiss
  287.  
  288.  jsr GetRand
  289.  lsr.w #6,d0
  290.  and.w #1,d0
  291.  add.w #17,d0
  292.  movem.l d0-d7/a0-a6,-(a7)
  293.  sub.l ObjectPoints,a1
  294.  add.l #ObjRotated,a1
  295.  move.l (a1),Noisex
  296.  move.w #100,Noisevol
  297.  move.w d0,Samplenum
  298.  move.b #1,chanpick
  299.  clr.b notifplaying
  300.  move.b 1(a0),IDNUM
  301.  st backbeat
  302.  jsr MakeSomeNoise
  303.  movem.l (a7)+,d0-d7/a0-a6
  304.  
  305.  Jsr GetRand
  306.  lsr.w #6,d0
  307.  and.w #255,d0
  308.  add.w #300,d0
  309.  move.w d0,SecTimer(a0)
  310.  
  311. .nohiss:
  312.  
  313.  move.b ObjInTop(a0),ViewerTop
  314.  move.b PLR1_StoodInTop,TargetTop
  315.  move.l PLR1_Roompt,ToRoom
  316.  move.l objroom,FromRoom
  317.  move.w newx,Viewerx
  318.  move.w newz,Viewerz
  319.  move.w PLR1_xoff,Targetx
  320.  move.w PLR1_zoff,Targetz
  321.  move.l PLR1_yoff,d0
  322.  asr.l #7,d0
  323.  move.w d0,Targety
  324.  move.w 4(a0),Viewery
  325.  jsr CanItBeSeen
  326.  
  327.  clr.b 17(a0)
  328.  
  329.  tst.b CanSee
  330.  beq .carryonprowling
  331.  
  332.  move.b #1,17(a0)
  333.  
  334. .carryonprowling:
  335.  
  336.  move.b ObjInTop(a0),ViewerTop
  337.  move.b PLR2_StoodInTop,TargetTop
  338.  move.l PLR2_Roompt,ToRoom
  339.  move.l objroom,FromRoom
  340.  move.w newx,Viewerx
  341.  move.w newz,Viewerz
  342.  move.w PLR2_xoff,Targetx
  343.  move.w PLR2_zoff,Targetz
  344.  move.l PLR2_yoff,d0
  345.  asr.l #7,d0
  346.  move.w d0,Targety
  347.  move.w 4(a0),Viewery
  348.  jsr CanItBeSeen
  349.  
  350.  tst.b CanSee
  351.  beq .carryonprowling2
  352.  
  353.  or.b #2,17(a0)
  354.  
  355. .carryonprowling2:
  356.  
  357.  move.w #80,d0
  358.  jsr FindCloseRoom
  359.  
  360.  rts
  361.  
  362. HalfWormAttack:
  363.  
  364.  move.w 12(a0),d2
  365.  move.l ZoneAdds,a5
  366.  move.l (a5,d2.w*4),d0
  367.  add.l LEVELDATA,d0
  368.  move.l d0,objroom
  369.  
  370.  btst #0,17(a0)
  371.  beq HalfWormAttackPLR2
  372.  btst #1,17(a0)
  373.  beq HalfWormAttackPLR1
  374.  
  375.  move.l ObjectPoints,a1
  376.  move.w (a0),d0
  377.  move.w (a1,d0.w*8),d1
  378.  move.w 4(a1,d0.w*8),d2
  379.  
  380.  move.w PLR1_xoff,d3
  381.  move.w PLR1_zoff,d4
  382.  sub.w d1,d3
  383.  sub.w d2,d4
  384.  muls d3,d3
  385.  muls d4,d4
  386.  add.l d4,d3
  387.  move.w PLR2_xoff,d4
  388.  move.w PLR2_zoff,d5
  389.  sub.w d1,d4
  390.  sub.w d2,d5
  391.  muls d4,d4
  392.  muls d5,d5
  393.  add.l d5,d4
  394.  cmp.l d3,d4
  395.  ble HalfWormAttackPLR2
  396.  
  397.  
  398. HalfWormAttackPLR1:
  399.  
  400.  
  401.  move.w TempFrames,d0
  402.  sub.w d0,FourthTimer(a0)
  403.  bgt.s .oktoshoot
  404.  move.w #50,ThirdTimer(a0)
  405. .oktoshoot:
  406.  
  407.  move.w 12(a0),d2
  408.  move.l ZoneAdds,a5
  409.  move.l (a5,d2.w*4),d0
  410.  add.l LEVELDATA,d0
  411.  move.l d0,objroom
  412.  
  413.  bsr ViewpointToDraw
  414.  
  415.  asl.l #2,d0
  416.  bne.s .notflfl
  417.  move.l #16,d0
  418. .notflfl:
  419.  
  420.  add.l #$d0000,d0
  421.  move.l d0,8(a0)
  422.  
  423.  move.w PLR1_xoff,newx
  424.  move.w PLR1_zoff,newz
  425.  move.w (a0),d1
  426.  move.l #ObjRotated,a6
  427.  move.l ObjectPoints,a1
  428.  lea (a1,d1.w*8),a1
  429.  lea (a6,d1.w*8),a6
  430.  move.w (a1),oldx
  431.  move.w 4(a1),oldz
  432.  move.w maxspd(a0),d2
  433.  muls.w TempFrames,d2
  434.  move.w d2,speed
  435.  move.w #80,Range
  436.  move.w 4(a0),d0
  437.  ext.l d0
  438.  asl.l #7,d0
  439.  sub.l #100*128,d0
  440.  move.l d0,newy
  441.  move.l d0,oldy
  442.  
  443.  move.b ObjInTop(a0),StoodInTop
  444.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  445.  clr.b canshove
  446.  clr.b GotThere
  447.  jsr HeadTowardsAng
  448.  move.w #%1000000000,wallflags
  449.  
  450.   
  451.  clr.b wallbounce
  452.  Jsr MoveObject
  453.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  454.  move.b StoodInTop,ObjInTop(a0)
  455.  
  456.  move.w AngRet,Facing(a0)
  457.  
  458.  move.l objroom,a2
  459.  move.w (a2),12(a0)
  460.  move.w oldx,(a1)
  461.  move.w oldz,4(a1)
  462.  
  463.  move.w (a2),d0
  464.  move.l #ZoneBrightTable,a5
  465.  move.l (a5,d0.w*4),d0
  466.  tst.b ObjInTop(a0)
  467.  bne.s .okbit
  468.  swap d0
  469. .okbit:
  470.  move.w d0,2(a0)
  471.  
  472.  move.l ToZoneFloor(a2),d0
  473.  tst.b ObjInTop(a0)
  474.  beq.s .notintop
  475.  move.l ToUpperFloor(a2),d0
  476. .notintop:
  477.  asr.l #7,d0
  478.  sub.w #100,d0
  479.  move.w d0,4(a0)
  480.  
  481.  
  482.  moveq #0,d2
  483.  move.b damagetaken(a0),d2
  484.  beq .noscream
  485.  
  486.  asr.b #2,d2
  487.  bne.s .notovercoat
  488.  moveq #1,d2
  489. .notovercoat:
  490.  
  491.  sub.b d2,numlives(a0)
  492.  bgt .notdeadyet
  493.  
  494.  cmp.b #1,d2
  495.  ble .noexplode
  496.  
  497.  movem.l d0-d7/a0-a6,-(a7)
  498.  sub.l ObjectPoints,a1
  499.  add.l #ObjRotated,a1
  500.  move.l (a1),Noisex
  501.  move.w #300,Noisevol
  502.  move.w #14,Samplenum
  503.  move.b #1,chanpick
  504.  clr.b notifplaying
  505.  st backbeat
  506.  move.b 1(a0),IDNUM
  507.  jsr MakeSomeNoise
  508.  movem.l (a7)+,d0-d7/a0-a6
  509.  
  510.  movem.l d0-d7/a0-a6,-(a7)
  511.  move.w #0,d0
  512.  asr.w #2,d2
  513.  tst.w d2
  514.  bgt.s .ko
  515.  moveq #1,d2
  516. .ko:
  517.  move.w #31,d3
  518.  jsr ExplodeIntoBits
  519.  movem.l (a7)+,d0-d7/a0-a6
  520.  
  521.  cmp.b #80,d2
  522.  blt .noexplode
  523.  
  524.  move.w #-1,12(a0)
  525.  rts
  526.  
  527. .noexplode:
  528.  
  529.  movem.l d0-d7/a0-a6,-(a7)
  530.  sub.l ObjectPoints,a1
  531.  add.l #ObjRotated,a1
  532.  move.l (a1),Noisex
  533.  move.w #200,Noisevol
  534.  move.w screamsound,Samplenum
  535.  move.b #1,chanpick
  536.  clr.b notifplaying
  537.  st backbeat
  538.  move.b 1(a0),IDNUM
  539.  jsr MakeSomeNoise
  540.  movem.l (a7)+,d0-d7/a0-a6
  541.  
  542.  move.w #25,ThirdTimer(a0)
  543.  move.w #80,d0
  544.  jsr FindCloseRoom
  545.  
  546.  rts
  547.  
  548. .notdeadyet:
  549.  clr.b damagetaken(a0)
  550.  movem.l d0-d7/a0-a6,-(a7)
  551.  sub.l ObjectPoints,a1
  552.  add.l #ObjRotated,a1
  553.  move.l (a1),Noisex
  554.  move.w #200,Noisevol
  555.  move.w screamsound,Samplenum
  556.  move.b #1,chanpick
  557.  clr.b notifplaying
  558.  move.b 1(a0),IDNUM
  559.  st backbeat
  560.  jsr MakeSomeNoise
  561.  movem.l (a7)+,d0-d7/a0-a6
  562.  
  563.  
  564.  
  565.  
  566. .noscream
  567.  
  568. ; tst.b canshootgun
  569. ; beq .cantshoot
  570.  cmp.w #20,FourthTimer(a0)
  571.  bge .cantshoot
  572.  
  573.  move.w #30,FourthTimer(a0)
  574.  
  575.  move.w ThirdTimer(a0),d0
  576.  sub.w #1,d0
  577.  
  578.  cmp.w #-3,d0
  579.  bge.s .noreset
  580.  
  581.  jsr GetRand
  582.  lsr.w #4,d0
  583.  and.w #255,d0
  584.  add.w #100,d0
  585.  
  586. .noreset:
  587.  move.w d0,ThirdTimer(a0)
  588.  
  589.  
  590.  move.l #$d0011,8(a0)
  591.  
  592.  move.w #9,Samplenum
  593.  move.b #5,SHOTTYPE
  594.  move.b #10,SHOTPOWER
  595.  move.w #16,SHOTSPEED
  596.  move.w #3,SHOTSHIFT
  597.  move.b ObjInTop(a0),SHOTINTOP
  598.  move.w #700,SHOTOFFMULT
  599.  move.l #-10*128,SHOTYOFF
  600.  move.w #-100,2(a0)
  601.  
  602.  jsr FireAtPlayer1
  603.  
  604. .cantshoot:
  605.  
  606.  
  607.  move.w TempFrames,d0
  608.  sub.w d0,SecTimer(a0)
  609.  bge.s .nohiss
  610.  
  611.  movem.l d0-d7/a0-a6,-(a7)
  612.  sub.l ObjectPoints,a1
  613.  add.l #ObjRotated,a1
  614.  move.l (a1),Noisex
  615.  move.w #100,Noisevol
  616.  move.w #16,Samplenum
  617.  move.b #1,chanpick
  618.  clr.b notifplaying
  619.  move.b 1(a0),IDNUM
  620.  st backbeat
  621.  jsr MakeSomeNoise
  622.  movem.l (a7)+,d0-d7/a0-a6
  623.  
  624.  Jsr GetRand
  625.  lsr.w #6,d0
  626.  and.w #255,d0
  627.  add.w #300,d0
  628.  move.w d0,SecTimer(a0)
  629.  
  630. .nohiss:
  631.  
  632.  move.b ObjInTop(a0),ViewerTop
  633.  move.b PLR1_StoodInTop,TargetTop
  634.  move.l PLR1_Roompt,ToRoom
  635.  move.l objroom,FromRoom
  636.  move.w newx,Viewerx
  637.  move.w newz,Viewerz
  638.  move.w PLR1_xoff,Targetx
  639.  move.w PLR1_zoff,Targetz
  640.  move.l PLR1_yoff,d0
  641.  asr.l #7,d0
  642.  move.w d0,Targety
  643.  move.w 4(a0),Viewery
  644.  jsr CanItBeSeen
  645.  
  646.  clr.b 17(a0)
  647.  tst.b CanSee
  648.  beq .carryonprowling
  649.  
  650.  move.b #1,17(a0)
  651.  
  652. .carryonprowling:
  653.  
  654.  cmp.b #'n',mors
  655.  beq.s .carryonprowling2
  656.  
  657.  
  658.  move.b ObjInTop(a0),ViewerTop
  659.  move.b PLR2_StoodInTop,TargetTop
  660.  move.l PLR2_Roompt,ToRoom
  661.  move.l objroom,FromRoom
  662.  move.w newx,Viewerx
  663.  move.w newz,Viewerz
  664.  move.w PLR2_xoff,Targetx
  665.  move.w PLR2_zoff,Targetz
  666.  move.l PLR2_yoff,d0
  667.  asr.l #7,d0
  668.  move.w d0,Targety
  669.  move.w 4(a0),Viewery
  670.  jsr CanItBeSeen
  671.  
  672.  tst.b CanSee
  673.  beq .carryonprowling2
  674.  
  675.  or.b #2,17(a0)
  676.  
  677. .carryonprowling2:
  678.  
  679.  move.w #80,d0
  680.  jsr FindCloseRoom
  681.  
  682.  rts
  683.  
  684. *************************************************
  685.  
  686. HalfWormAttackPLR2:
  687.  
  688.  
  689.  
  690.  move.w TempFrames,d0
  691.  sub.w d0,FourthTimer(a0)
  692.  bgt.s .oktoshoot
  693.  move.w #50,ThirdTimer(a0)
  694. .oktoshoot:
  695.  
  696.  move.w 12(a0),d2
  697.  move.l ZoneAdds,a5
  698.  move.l (a5,d2.w*4),d0
  699.  add.l LEVELDATA,d0
  700.  move.l d0,objroom
  701.  
  702.  bsr ViewpointToDraw
  703.  
  704.  asl.l #2,d0
  705.  bne.s .notflfl
  706.  move.l #16,d0
  707. .notflfl:
  708.  
  709.  add.l #$d0000,d0
  710.  move.l d0,8(a0)
  711.  
  712.  move.w PLR2_xoff,newx
  713.  move.w PLR2_zoff,newz
  714.  move.w (a0),d1
  715.  move.l #ObjRotated,a6
  716.  move.l ObjectPoints,a1
  717.  lea (a1,d1.w*8),a1
  718.  lea (a6,d1.w*8),a6
  719.  move.w (a1),oldx
  720.  move.w 4(a1),oldz
  721.  move.w maxspd(a0),d2
  722.  muls.w TempFrames,d2
  723.  move.w d2,speed
  724.  move.w #80,Range
  725.  move.w 4(a0),d0
  726.  ext.l d0
  727.  asl.l #7,d0
  728.  sub.l #100*128,d0
  729.  move.l d0,newy
  730.  move.l d0,oldy
  731.  
  732.  move.b ObjInTop(a0),StoodInTop
  733.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  734.  clr.b canshove
  735.  clr.b GotThere
  736.  jsr HeadTowardsAng
  737.  move.w #%1000000000,wallflags
  738.  
  739.   
  740.  clr.b wallbounce
  741.  Jsr MoveObject
  742.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  743.  move.b StoodInTop,ObjInTop(a0)
  744.  
  745.  move.w AngRet,Facing(a0)
  746.  
  747.  move.l objroom,a2
  748.  move.w (a2),12(a0)
  749.  move.w newx,(a1)
  750.  move.w newz,4(a1)
  751.  
  752.  move.w (a2),d0
  753.  move.l #ZoneBrightTable,a5
  754.  move.l (a5,d0.w*4),d0
  755.  tst.b ObjInTop(a0)
  756.  bne.s .okbit
  757.  swap d0
  758. .okbit:
  759.  move.w d0,2(a0)
  760.  
  761.  move.l ToZoneFloor(a2),d0
  762.  tst.b ObjInTop(a0)
  763.  beq.s .notintop
  764.  move.l ToUpperFloor(a2),d0
  765. .notintop:
  766.  asr.l #7,d0
  767.  sub.w #100,d0
  768.  move.w d0,4(a0)
  769.  
  770.  move.b damagetaken(a0),d2
  771.  beq .noscream
  772.  
  773.  asr.b #2,d2
  774.  bne.s .notovercoat
  775.  moveq #1,d2
  776. .notovercoat:
  777.  
  778.  sub.b d2,numlives(a0)
  779.  bgt .notdeadyet
  780.  
  781. ; cmp.b #1,d2
  782. ; ble.s .noexplode
  783.  
  784.  movem.l d0-d7/a0-a6,-(a7)
  785.  sub.l ObjectPoints,a1
  786.  add.l #ObjRotated,a1
  787.  move.l (a1),Noisex
  788.  move.w #400,Noisevol
  789.  move.w #14,Samplenum
  790.  move.b #1,chanpick
  791.  clr.b notifplaying
  792.  st backbeat
  793.  move.b 1(a0),IDNUM
  794.  jsr MakeSomeNoise
  795.  movem.l (a7)+,d0-d7/a0-a6
  796.  
  797.  movem.l d0-d7/a0-a6,-(a7)
  798.  move.w #0,d0
  799.  move.w #9,d2
  800.  move.w #31,d3
  801.  jsr ExplodeIntoBits
  802.  movem.l (a7)+,d0-d7/a0-a6
  803.  move.w #-1,12(a0)
  804.  rts
  805.  
  806. .noexplode:
  807.  
  808.  movem.l d0-d7/a0-a6,-(a7)
  809.  sub.l ObjectPoints,a1
  810.  add.l #ObjRotated,a1
  811.  move.l (a1),Noisex
  812.  move.w #200,Noisevol
  813.  move.w screamsound,Samplenum
  814.  move.b #1,chanpick
  815.  clr.b notifplaying
  816.  st backbeat
  817.  move.b 1(a0),IDNUM
  818.  jsr MakeSomeNoise
  819.  movem.l (a7)+,d0-d7/a0-a6
  820.  move.l deadframe,8(a0)
  821.  move.w #80,d0
  822.  jsr FindCloseRoom
  823.  rts
  824.  
  825. .notdeadyet:
  826.  clr.b damagetaken(a0)
  827.  movem.l d0-d7/a0-a6,-(a7)
  828.  sub.l ObjectPoints,a1
  829.  add.l #ObjRotated,a1
  830.  move.l (a1),Noisex
  831.  move.w #200,Noisevol
  832.  move.w screamsound,Samplenum
  833.  move.b #1,chanpick
  834.  clr.b notifplaying
  835.  move.b 1(a0),IDNUM
  836.  st backbeat
  837.  jsr MakeSomeNoise
  838.  movem.l (a7)+,d0-d7/a0-a6
  839.  
  840. .noscream
  841.  
  842. ; tst.b canshootgun
  843. ; beq .cantshoot
  844.  cmp.w #20,FourthTimer(a0)
  845.  bge .cantshoot
  846.  
  847.  move.w #30,FourthTimer(a0)
  848.  
  849.  move.w ThirdTimer(a0),d0
  850.  sub.w #1,d0
  851.  cmp.w #-3,d0
  852.  bge.s .noreset
  853.  
  854.  jsr GetRand
  855.  lsr.w #4,d0
  856.  and.w #255,d0
  857.  add.w #100,d0
  858.  
  859. .noreset:
  860.  move.w d0,ThirdTimer(a0)
  861.  
  862.  
  863.  move.l #$d0011,8(a0)
  864.  
  865.  move.w #9,Samplenum
  866.  move.b #5,SHOTTYPE
  867.  move.b #10,SHOTPOWER
  868.  move.w #16,SHOTSPEED
  869.  move.w #3,SHOTSHIFT
  870.  move.b ObjInTop(a0),SHOTINTOP
  871.  move.w #700,SHOTOFFMULT
  872.  move.l #-10*128,SHOTYOFF
  873.  move.w #-100,2(a0)
  874.  
  875.  jsr FireAtPlayer2
  876.  
  877. .cantshoot:
  878.  
  879.  
  880.  move.w TempFrames,d0
  881.  sub.w d0,SecTimer(a0)
  882.  bge.s .nohiss
  883.  
  884.  movem.l d0-d7/a0-a6,-(a7)
  885.  sub.l ObjectPoints,a1
  886.  add.l #ObjRotated,a1
  887.  move.l (a1),Noisex
  888.  move.w #100,Noisevol
  889.  move.w #16,Samplenum
  890.  move.b #1,chanpick
  891.  clr.b notifplaying
  892.  move.b 1(a0),IDNUM
  893.  st backbeat
  894.  jsr MakeSomeNoise
  895.  movem.l (a7)+,d0-d7/a0-a6
  896.  
  897.  Jsr GetRand
  898.  lsr.w #6,d0
  899.  and.w #255,d0
  900.  add.w #300,d0
  901.  move.w d0,SecTimer(a0)
  902.  
  903. .nohiss:
  904.  
  905.  move.b ObjInTop(a0),ViewerTop
  906.  move.b PLR1_StoodInTop,TargetTop
  907.  move.l PLR1_Roompt,ToRoom
  908.  move.l objroom,FromRoom
  909.  move.w newx,Viewerx
  910.  move.w newz,Viewerz
  911.  move.w PLR1_xoff,Targetx
  912.  move.w PLR1_zoff,Targetz
  913.  move.l PLR1_yoff,d0
  914.  asr.l #7,d0
  915.  move.w d0,Targety
  916.  move.w 4(a0),Viewery
  917.  jsr CanItBeSeen
  918.  
  919.  clr.b 17(a0)
  920.  tst.b CanSee
  921.  beq .carryonprowling
  922.  
  923.  move.b #1,17(a0)
  924.  
  925. .carryonprowling:
  926.  
  927.  cmp.b #'n',mors
  928.  beq.s .carryonprowling2
  929.  
  930.  
  931.  move.b ObjInTop(a0),ViewerTop
  932.  move.b PLR2_StoodInTop,TargetTop
  933.  move.l PLR2_Roompt,ToRoom
  934.  move.l objroom,FromRoom
  935.  move.w newx,Viewerx
  936.  move.w newz,Viewerz
  937.  move.w PLR2_xoff,Targetx
  938.  move.w PLR2_zoff,Targetz
  939.  move.l PLR2_yoff,d0
  940.  asr.l #7,d0
  941.  move.w d0,Targety
  942.  move.w 4(a0),Viewery
  943.  jsr CanItBeSeen
  944.  
  945.  tst.b CanSee
  946.  beq .carryonprowling2
  947.  
  948.  or.b #2,17(a0)
  949.  
  950. .carryonprowling2:
  951.  
  952.  
  953.  
  954.  move.w #80,d0
  955.  jsr FindCloseRoom
  956.  
  957.  rts
  958.  
  959.  
  960.